test_config.cpp 24.5 KB
Newer Older
J
jinhai 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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.

S
starlord 已提交
18
#include <gtest/gtest-death-test.h>
Y
youny626 已提交
19
#include <gtest/gtest.h>
20
#include <cmath>
G
groot 已提交
21

Y
yudong.cai 已提交
22
#include "config/YamlConfigMgr.h"
S
starlord 已提交
23
#include "server/Config.h"
S
starlord 已提交
24
#include "server/utils.h"
Y
youny626 已提交
25
#include "utils/CommonUtil.h"
Z
Zhiru Zhu 已提交
26
#include "utils/StringHelpFunctions.h"
Y
youny626 已提交
27
#include "utils/ValidationUtil.h"
G
groot 已提交
28

G
groot 已提交
29 30
#include <limits>

G
groot 已提交
31 32
namespace {

S
starlord 已提交
33
static constexpr uint64_t KB = 1024;
S
starlord 已提交
34 35
static constexpr uint64_t MB = KB * 1024;
static constexpr uint64_t GB = MB * 1024;
S
starlord 已提交
36

Y
youny626 已提交
37
}  // namespace
G
groot 已提交
38

C
Cai Yudong 已提交
39 40
namespace ms = milvus::server;

S
starlord 已提交
41
TEST_F(ConfigTest, CONFIG_TEST) {
S
starlord 已提交
42
    milvus::server::ConfigMgr* config_mgr = milvus::server::YamlConfigMgr::GetInstance();
G
groot 已提交
43

Y
yudong.cai 已提交
44 45
    milvus::Status s = config_mgr->LoadConfigFile("");
    ASSERT_FALSE(s.ok());
G
groot 已提交
46

S
starlord 已提交
47
    std::string config_path(CONFIG_PATH);
S
starlord 已提交
48
    s = config_mgr->LoadConfigFile(config_path + INVALID_CONFIG_FILE);
Y
yudong.cai 已提交
49
    ASSERT_FALSE(s.ok());
G
groot 已提交
50

S
starlord 已提交
51
    s = config_mgr->LoadConfigFile(config_path + VALID_CONFIG_FILE);
Y
yudong.cai 已提交
52
    ASSERT_TRUE(s.ok());
G
groot 已提交
53

G
groot 已提交
54 55
    config_mgr->Print();

S
starlord 已提交
56 57 58 59 60
    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");
S
starlord 已提交
61
    milvus::server::ConfigNode invalid_config = root_config.GetChild("invalid_config");
S
starlord 已提交
62 63 64
    auto valus = invalid_config.GetSequence("not_exist");
    float ff = invalid_config.GetFloatValue("not_exist", 3.0);
    ASSERT_EQ(ff, 3.0);
G
groot 已提交
65 66 67 68

    std::string address = server_config.GetValue("address");
    ASSERT_TRUE(!address.empty());
    int64_t port = server_config.GetInt64Value("port");
S
starlord 已提交
69
    ASSERT_NE(port, 0);
G
groot 已提交
70

G
groot 已提交
71 72
    server_config.SetValue("float_test", "2.5");
    double dbl = server_config.GetDoubleValue("float_test");
73
    ASSERT_LE(std::fabs(dbl - 2.5), std::numeric_limits<double>::epsilon());
G
groot 已提交
74
    float flt = server_config.GetFloatValue("float_test");
75
    ASSERT_LE(std::fabs(flt - 2.5), std::numeric_limits<float>::epsilon());
G
groot 已提交
76 77 78 79 80 81 82 83 84 85

    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);
G
groot 已提交
86

S
starlord 已提交
87
    milvus::server::ConfigNode fake;
G
groot 已提交
88 89
    server_config.AddChild("fake", fake);
    fake = server_config.GetChild("fake");
S
starlord 已提交
90
    milvus::server::ConfigNodeArr arr;
G
groot 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
    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);

S
starlord 已提交
107
    milvus::server::ConfigNode combine;
G
groot 已提交
108 109 110 111 112 113
    combine.Combine(server_config);

    combine.PrintAll();
    std::string all = combine.DumpString();
    ASSERT_TRUE(!all.empty());

G
groot 已提交
114 115 116 117 118
    server_config.ClearSequences();
    auto seqs = server_config.GetSequences();
    ASSERT_TRUE(seqs.empty());
}

Z
Zhiru Zhu 已提交
119 120 121 122 123 124 125 126 127 128
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";
C
Cai Yudong 已提交
129 130
    ASSERT_TRUE(config.SetServerConfigAddress(server_addr).ok());
    ASSERT_TRUE(config.GetServerConfigAddress(str_val).ok());
Z
Zhiru Zhu 已提交
131 132 133
    ASSERT_TRUE(str_val == server_addr);

    std::string server_port = "12345";
C
Cai Yudong 已提交
134 135
    ASSERT_TRUE(config.SetServerConfigPort(server_port).ok());
    ASSERT_TRUE(config.GetServerConfigPort(str_val).ok());
Z
Zhiru Zhu 已提交
136 137 138
    ASSERT_TRUE(str_val == server_port);

    std::string server_mode = "cluster_readonly";
C
Cai Yudong 已提交
139 140
    ASSERT_TRUE(config.SetServerConfigDeployMode(server_mode).ok());
    ASSERT_TRUE(config.GetServerConfigDeployMode(str_val).ok());
Z
Zhiru Zhu 已提交
141 142 143
    ASSERT_TRUE(str_val == server_mode);

    std::string server_time_zone = "UTC+6";
C
Cai Yudong 已提交
144 145
    ASSERT_TRUE(config.SetServerConfigTimeZone(server_time_zone).ok());
    ASSERT_TRUE(config.GetServerConfigTimeZone(str_val).ok());
Z
Zhiru Zhu 已提交
146 147 148 149
    ASSERT_TRUE(str_val == server_time_zone);

    /* db config */
    std::string db_backend_url = "mysql://root:123456@127.0.0.1:19530/milvus";
C
Cai Yudong 已提交
150 151
    ASSERT_TRUE(config.SetDBConfigBackendUrl(db_backend_url).ok());
    ASSERT_TRUE(config.GetDBConfigBackendUrl(str_val).ok());
Z
Zhiru Zhu 已提交
152 153
    ASSERT_TRUE(str_val == db_backend_url);

Y
yudong.cai 已提交
154
    int64_t db_archive_disk_threshold = 100;
C
Cai Yudong 已提交
155 156
    ASSERT_TRUE(config.SetDBConfigArchiveDiskThreshold(std::to_string(db_archive_disk_threshold)).ok());
    ASSERT_TRUE(config.GetDBConfigArchiveDiskThreshold(int64_val).ok());
Y
yudong.cai 已提交
157
    ASSERT_TRUE(int64_val == db_archive_disk_threshold);
Z
Zhiru Zhu 已提交
158

Y
yudong.cai 已提交
159
    int64_t db_archive_days_threshold = 365;
C
Cai Yudong 已提交
160 161
    ASSERT_TRUE(config.SetDBConfigArchiveDaysThreshold(std::to_string(db_archive_days_threshold)).ok());
    ASSERT_TRUE(config.GetDBConfigArchiveDaysThreshold(int64_val).ok());
Y
yudong.cai 已提交
162
    ASSERT_TRUE(int64_val == db_archive_days_threshold);
Z
Zhiru Zhu 已提交
163

Y
yudong.cai 已提交
164
    int64_t db_insert_buffer_size = 2;
C
Cai Yudong 已提交
165 166
    ASSERT_TRUE(config.SetDBConfigInsertBufferSize(std::to_string(db_insert_buffer_size)).ok());
    ASSERT_TRUE(config.GetDBConfigInsertBufferSize(int64_val).ok());
Y
yudong.cai 已提交
167
    ASSERT_TRUE(int64_val == db_insert_buffer_size);
Z
Zhiru Zhu 已提交
168

C
Cai Yudong 已提交
169
    /* storage config */
170 171 172 173 174 175 176 177 178 179
    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);

C
Cai Yudong 已提交
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
    bool storage_minio_enable = false;
    ASSERT_TRUE(config.SetStorageConfigMinioEnable(std::to_string(storage_minio_enable)).ok());
    ASSERT_TRUE(config.GetStorageConfigMinioEnable(bool_val).ok());
    ASSERT_TRUE(bool_val == storage_minio_enable);

    std::string storage_minio_addr = "192.168.1.100";
    ASSERT_TRUE(config.SetStorageConfigMinioAddress(storage_minio_addr).ok());
    ASSERT_TRUE(config.GetStorageConfigMinioAddress(str_val).ok());
    ASSERT_TRUE(str_val == storage_minio_addr);

    std::string storage_minio_port = "12345";
    ASSERT_TRUE(config.SetStorageConfigMinioPort(storage_minio_port).ok());
    ASSERT_TRUE(config.GetStorageConfigMinioPort(str_val).ok());
    ASSERT_TRUE(str_val == storage_minio_port);

    std::string storage_minio_access_key = "minioadmin";
    ASSERT_TRUE(config.SetStorageConfigMinioAccessKey(storage_minio_access_key).ok());
    ASSERT_TRUE(config.GetStorageConfigMinioAccessKey(str_val).ok());
    ASSERT_TRUE(str_val == storage_minio_access_key);

    std::string storage_minio_secret_key = "minioadmin";
    ASSERT_TRUE(config.SetStorageConfigMinioSecretKey(storage_minio_secret_key).ok());
    ASSERT_TRUE(config.GetStorageConfigMinioSecretKey(str_val).ok());
    ASSERT_TRUE(str_val == storage_minio_secret_key);

    std::string storage_minio_bucket = "miniobucket";
    ASSERT_TRUE(config.SetStorageConfigMinioBucket(storage_minio_bucket).ok());
    ASSERT_TRUE(config.GetStorageConfigMinioBucket(str_val).ok());
    ASSERT_TRUE(str_val == storage_minio_bucket);

Z
Zhiru Zhu 已提交
210 211
    /* metric config */
    bool metric_enable_monitor = false;
C
Cai Yudong 已提交
212 213
    ASSERT_TRUE(config.SetMetricConfigEnableMonitor(std::to_string(metric_enable_monitor)).ok());
    ASSERT_TRUE(config.GetMetricConfigEnableMonitor(bool_val).ok());
Z
Zhiru Zhu 已提交
214 215 216
    ASSERT_TRUE(bool_val == metric_enable_monitor);

    std::string metric_collector = "prometheus";
C
Cai Yudong 已提交
217 218
    ASSERT_TRUE(config.SetMetricConfigCollector(metric_collector).ok());
    ASSERT_TRUE(config.GetMetricConfigCollector(str_val).ok());
Z
Zhiru Zhu 已提交
219 220
    ASSERT_TRUE(str_val == metric_collector);

221 222 223 224
    std::string metric_prometheus_address = "127.0.0.1";
    ASSERT_TRUE(config.GetMetricConfigPrometheusAddress(str_val).ok());
    ASSERT_TRUE(str_val == metric_prometheus_address);

Z
Zhiru Zhu 已提交
225
    std::string metric_prometheus_port = "2222";
C
Cai Yudong 已提交
226 227
    ASSERT_TRUE(config.SetMetricConfigPrometheusPort(metric_prometheus_port).ok());
    ASSERT_TRUE(config.GetMetricConfigPrometheusPort(str_val).ok());
Z
Zhiru Zhu 已提交
228 229 230
    ASSERT_TRUE(str_val == metric_prometheus_port);

    /* cache config */
Y
yukun 已提交
231
    int64_t cache_cpu_cache_capacity = 1;
C
Cai Yudong 已提交
232 233
    ASSERT_TRUE(config.SetCacheConfigCpuCacheCapacity(std::to_string(cache_cpu_cache_capacity)).ok());
    ASSERT_TRUE(config.GetCacheConfigCpuCacheCapacity(int64_val).ok());
Z
Zhiru Zhu 已提交
234 235 236
    ASSERT_TRUE(int64_val == cache_cpu_cache_capacity);

    float cache_cpu_cache_threshold = 0.1;
C
Cai Yudong 已提交
237 238
    ASSERT_TRUE(config.SetCacheConfigCpuCacheThreshold(std::to_string(cache_cpu_cache_threshold)).ok());
    ASSERT_TRUE(config.GetCacheConfigCpuCacheThreshold(float_val).ok());
Z
Zhiru Zhu 已提交
239 240 241
    ASSERT_TRUE(float_val == cache_cpu_cache_threshold);

    bool cache_insert_data = true;
C
Cai Yudong 已提交
242 243
    ASSERT_TRUE(config.SetCacheConfigCacheInsertData(std::to_string(cache_insert_data)).ok());
    ASSERT_TRUE(config.GetCacheConfigCacheInsertData(bool_val).ok());
Z
Zhiru Zhu 已提交
244 245 246
    ASSERT_TRUE(bool_val == cache_insert_data);

    /* engine config */
Y
yudong.cai 已提交
247
    int64_t engine_use_blas_threshold = 50;
C
Cai Yudong 已提交
248 249
    ASSERT_TRUE(config.SetEngineConfigUseBlasThreshold(std::to_string(engine_use_blas_threshold)).ok());
    ASSERT_TRUE(config.GetEngineConfigUseBlasThreshold(int64_val).ok());
Y
yudong.cai 已提交
250
    ASSERT_TRUE(int64_val == engine_use_blas_threshold);
Z
Zhiru Zhu 已提交
251

Y
yukun 已提交
252
    int64_t engine_omp_thread_num = 1;
C
Cai Yudong 已提交
253 254
    ASSERT_TRUE(config.SetEngineConfigOmpThreadNum(std::to_string(engine_omp_thread_num)).ok());
    ASSERT_TRUE(config.GetEngineConfigOmpThreadNum(int64_val).ok());
Y
yudong.cai 已提交
255
    ASSERT_TRUE(int64_val == engine_omp_thread_num);
Z
Zhiru Zhu 已提交
256

G
groot 已提交
257
#ifdef MILVUS_GPU_VERSION
Y
yudong.cai 已提交
258
    int64_t engine_gpu_search_threshold = 800;
C
Cai Yudong 已提交
259 260
    ASSERT_TRUE(config.SetEngineConfigGpuSearchThreshold(std::to_string(engine_gpu_search_threshold)).ok());
    ASSERT_TRUE(config.GetEngineConfigGpuSearchThreshold(int64_val).ok());
Y
yudong.cai 已提交
261
    ASSERT_TRUE(int64_val == engine_gpu_search_threshold);
C
Cai Yudong 已提交
262
#endif
Z
Zhiru Zhu 已提交
263

Y
yudong.cai 已提交
264
    /* gpu resource config */
C
Cai Yudong 已提交
265
#ifdef MILVUS_GPU_VERSION
Y
yudong.cai 已提交
266
    bool resource_enable_gpu = true;
C
Cai Yudong 已提交
267 268
    ASSERT_TRUE(config.SetGpuResourceConfigEnable(std::to_string(resource_enable_gpu)).ok());
    ASSERT_TRUE(config.GetGpuResourceConfigEnable(bool_val).ok());
Y
yudong.cai 已提交
269
    ASSERT_TRUE(bool_val == resource_enable_gpu);
Z
Zhiru Zhu 已提交
270

Y
yudong.cai 已提交
271
    int64_t gpu_cache_capacity = 1;
C
Cai Yudong 已提交
272 273
    ASSERT_TRUE(config.SetGpuResourceConfigCacheCapacity(std::to_string(gpu_cache_capacity)).ok());
    ASSERT_TRUE(config.GetGpuResourceConfigCacheCapacity(int64_val).ok());
Y
yudong.cai 已提交
274 275 276
    ASSERT_TRUE(int64_val == gpu_cache_capacity);

    float gpu_cache_threshold = 0.2;
C
Cai Yudong 已提交
277 278
    ASSERT_TRUE(config.SetGpuResourceConfigCacheThreshold(std::to_string(gpu_cache_threshold)).ok());
    ASSERT_TRUE(config.GetGpuResourceConfigCacheThreshold(float_val).ok());
Y
yudong.cai 已提交
279 280 281
    ASSERT_TRUE(float_val == gpu_cache_threshold);

    std::vector<std::string> search_resources = {"gpu0"};
Y
yudong.cai 已提交
282
    std::vector<int64_t> search_res_vec;
283
    std::string search_res_str;
Z
Zhiru Zhu 已提交
284
    milvus::server::StringHelpFunctions::MergeStringWithDelimeter(
Y
yudong.cai 已提交
285
        search_resources, milvus::server::CONFIG_GPU_RESOURCE_DELIMITER, search_res_str);
C
Cai Yudong 已提交
286 287
    ASSERT_TRUE(config.SetGpuResourceConfigSearchResources(search_res_str).ok());
    ASSERT_TRUE(config.GetGpuResourceConfigSearchResources(search_res_vec).ok());
Z
Zhiru Zhu 已提交
288
    for (size_t i = 0; i < search_resources.size(); i++) {
Y
yudong.cai 已提交
289
        ASSERT_TRUE(std::stoll(search_resources[i].substr(3)) == search_res_vec[i]);
Z
Zhiru Zhu 已提交
290 291
    }

Y
yudong.cai 已提交
292
    std::vector<std::string> build_index_resources = {"gpu0"};
Y
yudong.cai 已提交
293
    std::vector<int64_t> build_index_res_vec;
Y
yudong.cai 已提交
294
    std::string build_index_res_str;
295
    milvus::server::StringHelpFunctions::MergeStringWithDelimeter(
Y
yudong.cai 已提交
296
        build_index_resources, milvus::server::CONFIG_GPU_RESOURCE_DELIMITER, build_index_res_str);
C
Cai Yudong 已提交
297 298
    ASSERT_TRUE(config.SetGpuResourceConfigBuildIndexResources(build_index_res_str).ok());
    ASSERT_TRUE(config.GetGpuResourceConfigBuildIndexResources(build_index_res_vec).ok());
Y
yudong.cai 已提交
299
    for (size_t i = 0; i < build_index_resources.size(); i++) {
Y
yudong.cai 已提交
300
        ASSERT_TRUE(std::stoll(build_index_resources[i].substr(3)) == build_index_res_vec[i]);
301
    }
Y
yudong.cai 已提交
302
#endif
Z
Zhiru Zhu 已提交
303 304
}

305 306
std::string
gen_get_command(const std::string& parent_node, const std::string& child_node) {
307
    std::string cmd = "get_config " + parent_node + ms::CONFIG_NODE_DELIMITER + child_node;
C
Cai Yudong 已提交
308 309 310
    return cmd;
}

311 312
std::string
gen_set_command(const std::string& parent_node, const std::string& child_node, const std::string& value) {
313
    std::string cmd = "set_config " + parent_node + ms::CONFIG_NODE_DELIMITER + child_node + " " + value;
C
Cai Yudong 已提交
314 315 316 317 318 319 320 321 322 323 324
    return cmd;
}

TEST_F(ConfigTest, SERVER_CONFIG_CLI_TEST) {
    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;

325 326 327
    s = config.ProcessConfigCli(result, "get_config *");
    ASSERT_TRUE(s.ok());

C
Cai Yudong 已提交
328 329 330 331
    /* 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);
332
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
333
    ASSERT_FALSE(s.ok());
334
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
335 336 337
    ASSERT_TRUE(s.ok());

    /* db config */
338 339 340
    std::string db_insert_buffer_size = "4";
    get_cmd = gen_get_command(ms::CONFIG_DB, ms::CONFIG_DB_INSERT_BUFFER_SIZE);
    set_cmd = gen_set_command(ms::CONFIG_DB, ms::CONFIG_DB_INSERT_BUFFER_SIZE, db_insert_buffer_size);
341
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
342
    ASSERT_FALSE(s.ok());
343
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
344 345 346 347 348 349
    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);
350
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
351
    ASSERT_FALSE(s.ok());
352
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
353 354
    ASSERT_TRUE(s.ok());

C
Cai Yudong 已提交
355 356 357 358 359 360 361 362 363
    /* storage config */
    std::string storage_minio_enable = "true";
    get_cmd = gen_get_command(ms::CONFIG_STORAGE, ms::CONFIG_STORAGE_MINIO_ENABLE);
    set_cmd = gen_set_command(ms::CONFIG_STORAGE, ms::CONFIG_STORAGE_MINIO_ENABLE, storage_minio_enable);
    s = config.ProcessConfigCli(dummy, set_cmd);
    ASSERT_FALSE(s.ok());
    s = config.ProcessConfigCli(result, get_cmd);
    ASSERT_TRUE(s.ok());

C
Cai Yudong 已提交
364
    /* cache config */
Y
yukun 已提交
365
    std::string cache_cpu_cache_capacity = "1";
C
Cai Yudong 已提交
366 367
    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);
368
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
369
    ASSERT_TRUE(s.ok());
370
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
371 372 373 374 375 376
    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);
377
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
378
    ASSERT_TRUE(s.ok());
379
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
380 381 382 383 384
    ASSERT_TRUE(result == cache_cpu_cache_threshold);

    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);
385
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
386
    ASSERT_TRUE(s.ok());
387
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
388 389 390 391 392 393
    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);
394
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
395
    ASSERT_TRUE(s.ok());
396
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
397 398 399
    ASSERT_TRUE(s.ok());
    ASSERT_TRUE(result == engine_use_blas_threshold);

Y
yukun 已提交
400
    std::string engine_omp_thread_num = "1";
C
Cai Yudong 已提交
401 402
    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);
403
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
404
    ASSERT_TRUE(s.ok());
405
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
406 407 408 409 410 411 412
    ASSERT_TRUE(s.ok());
    ASSERT_TRUE(result == engine_omp_thread_num);

#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);
413
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
414
    ASSERT_TRUE(s.ok());
415
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
416 417
    ASSERT_TRUE(s.ok());
    ASSERT_TRUE(result == engine_gpu_search_threshold);
C
Cai Yudong 已提交
418
#endif
C
Cai Yudong 已提交
419 420

    /* gpu resource config */
C
Cai Yudong 已提交
421
#ifdef MILVUS_GPU_VERSION
C
Cai Yudong 已提交
422 423 424
    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);
425
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
426
    ASSERT_TRUE(s.ok());
427
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
428 429 430 431 432 433
    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);
434
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
435
    ASSERT_TRUE(s.ok());
436
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
437 438 439 440 441 442
    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);
443
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
444
    ASSERT_TRUE(s.ok());
445
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
446 447 448 449 450
    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);
451
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
452
    ASSERT_TRUE(s.ok());
453
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
454 455 456 457 458 459 460
    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);
461
    s = config.ProcessConfigCli(dummy, set_cmd);
C
Cai Yudong 已提交
462
    ASSERT_TRUE(s.ok());
463
    s = config.ProcessConfigCli(result, get_cmd);
C
Cai Yudong 已提交
464 465 466 467 468
    ASSERT_TRUE(s.ok());
    ASSERT_TRUE(result == build_index_resources);
#endif
}

Z
Zhiru Zhu 已提交
469 470 471 472 473
TEST_F(ConfigTest, SERVER_CONFIG_INVALID_TEST) {
    std::string config_path(CONFIG_PATH);
    milvus::server::Config& config = milvus::server::Config::GetInstance();
    milvus::Status s;

C
Cai Yudong 已提交
474
    ASSERT_FALSE(config.LoadConfigFile("").ok());
Z
Zhiru Zhu 已提交
475

C
Cai Yudong 已提交
476 477
    ASSERT_FALSE(config.LoadConfigFile(config_path + INVALID_CONFIG_FILE).ok());
    ASSERT_FALSE(config.LoadConfigFile(config_path + "dummy.yaml").ok());
Z
Zhiru Zhu 已提交
478 479

    /* server config */
C
Cai Yudong 已提交
480 481
    ASSERT_FALSE(config.SetServerConfigAddress("0.0.0").ok());
    ASSERT_FALSE(config.SetServerConfigAddress("0.0.0.256").ok());
Z
Zhiru Zhu 已提交
482

C
Cai Yudong 已提交
483 484
    ASSERT_FALSE(config.SetServerConfigPort("a").ok());
    ASSERT_FALSE(config.SetServerConfigPort("99999").ok());
Z
Zhiru Zhu 已提交
485

C
Cai Yudong 已提交
486
    ASSERT_FALSE(config.SetServerConfigDeployMode("cluster").ok());
Z
Zhiru Zhu 已提交
487

C
Cai Yudong 已提交
488 489 490
    ASSERT_FALSE(config.SetServerConfigTimeZone("GM").ok());
    ASSERT_FALSE(config.SetServerConfigTimeZone("GMT8").ok());
    ASSERT_FALSE(config.SetServerConfigTimeZone("UTCA").ok());
Z
Zhiru Zhu 已提交
491 492

    /* db config */
C
Cai Yudong 已提交
493 494 495
    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());
Z
Zhiru Zhu 已提交
496

C
Cai Yudong 已提交
497
    ASSERT_FALSE(config.SetDBConfigArchiveDiskThreshold("0x10").ok());
Z
Zhiru Zhu 已提交
498

C
Cai Yudong 已提交
499
    ASSERT_FALSE(config.SetDBConfigArchiveDaysThreshold("0x10").ok());
Z
Zhiru Zhu 已提交
500

C
Cai Yudong 已提交
501 502 503 504 505
    ASSERT_FALSE(config.SetDBConfigInsertBufferSize("a").ok());
    ASSERT_FALSE(config.SetDBConfigInsertBufferSize("0").ok());
    ASSERT_FALSE(config.SetDBConfigInsertBufferSize("2048").ok());

    /* storage config */
506 507 508 509
    ASSERT_FALSE(config.SetStorageConfigPrimaryPath("").ok());

    // ASSERT_FALSE(config.SetStorageConfigSecondaryPath("").ok());

C
Cai Yudong 已提交
510 511 512 513 514 515 516 517 518 519 520 521
    ASSERT_FALSE(config.SetStorageConfigMinioEnable("10").ok());

    ASSERT_FALSE(config.SetStorageConfigMinioAddress("127.0.0").ok());

    ASSERT_FALSE(config.SetStorageConfigMinioPort("100").ok());
    ASSERT_FALSE(config.SetStorageConfigMinioPort("100000").ok());

    ASSERT_FALSE(config.SetStorageConfigMinioAccessKey("").ok());

    ASSERT_FALSE(config.SetStorageConfigMinioSecretKey("").ok());

    ASSERT_FALSE(config.SetStorageConfigMinioBucket("").ok());
Z
Zhiru Zhu 已提交
522 523

    /* metric config */
C
Cai Yudong 已提交
524
    ASSERT_FALSE(config.SetMetricConfigEnableMonitor("Y").ok());
Z
Zhiru Zhu 已提交
525

C
Cai Yudong 已提交
526
    ASSERT_FALSE(config.SetMetricConfigCollector("zilliz").ok());
Z
Zhiru Zhu 已提交
527

528 529
    ASSERT_FALSE(config.SetMetricConfigPrometheusAddress("127.0.0").ok());

C
Cai Yudong 已提交
530
    ASSERT_FALSE(config.SetMetricConfigPrometheusPort("0xff").ok());
Z
Zhiru Zhu 已提交
531 532

    /* cache config */
C
Cai Yudong 已提交
533 534 535
    ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("a").ok());
    ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("0").ok());
    ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("2048").ok());
Z
Zhiru Zhu 已提交
536

C
Cai Yudong 已提交
537 538
    ASSERT_FALSE(config.SetCacheConfigCpuCacheThreshold("a").ok());
    ASSERT_FALSE(config.SetCacheConfigCpuCacheThreshold("1.0").ok());
Z
Zhiru Zhu 已提交
539

C
Cai Yudong 已提交
540
    ASSERT_FALSE(config.SetCacheConfigCacheInsertData("N").ok());
Z
Zhiru Zhu 已提交
541 542

    /* engine config */
C
Cai Yudong 已提交
543
    ASSERT_FALSE(config.SetEngineConfigUseBlasThreshold("0xff").ok());
Z
Zhiru Zhu 已提交
544

C
Cai Yudong 已提交
545 546
    ASSERT_FALSE(config.SetEngineConfigOmpThreadNum("a").ok());
    ASSERT_FALSE(config.SetEngineConfigOmpThreadNum("10000").ok());
Z
Zhiru Zhu 已提交
547

G
groot 已提交
548
#ifdef MILVUS_GPU_VERSION
C
Cai Yudong 已提交
549 550
    ASSERT_FALSE(config.SetEngineConfigGpuSearchThreshold("-1").ok());
#endif
Z
Zhiru Zhu 已提交
551

G
groot 已提交
552
    /* gpu resource config */
C
Cai Yudong 已提交
553 554
#ifdef MILVUS_GPU_VERSION
    ASSERT_FALSE(config.SetGpuResourceConfigEnable("ok").ok());
Z
Zhiru Zhu 已提交
555

C
Cai Yudong 已提交
556 557
    ASSERT_FALSE(config.SetGpuResourceConfigCacheCapacity("a").ok());
    ASSERT_FALSE(config.SetGpuResourceConfigCacheCapacity("128").ok());
Z
Zhiru Zhu 已提交
558

C
Cai Yudong 已提交
559 560
    ASSERT_FALSE(config.SetGpuResourceConfigCacheThreshold("a").ok());
    ASSERT_FALSE(config.SetGpuResourceConfigCacheThreshold("1.0").ok());
Z
Zhiru Zhu 已提交
561

C
Cai Yudong 已提交
562
    ASSERT_FALSE(config.SetGpuResourceConfigSearchResources("gpu10").ok());
563

C
Cai Yudong 已提交
564 565
    ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gup2").ok());
    ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gpu16").ok());
Y
yudong.cai 已提交
566
#endif
Z
Zhiru Zhu 已提交
567 568
}

S
starlord 已提交
569
TEST_F(ConfigTest, SERVER_CONFIG_TEST) {
S
starlord 已提交
570
    std::string config_path(CONFIG_PATH);
S
starlord 已提交
571
    milvus::server::Config& config = milvus::server::Config::GetInstance();
G
groot 已提交
572

C
Cai Yudong 已提交
573 574 575
    ASSERT_TRUE(config.LoadConfigFile(config_path + VALID_CONFIG_FILE).ok());

    ASSERT_TRUE(config.ValidateConfig().ok());
S
starlord 已提交
576

577 578 579
    std::string config_json_str;
    config.GetConfigJsonStr(config_json_str);
    std::cout << config_json_str << std::endl;
Y
yudong.cai 已提交
580

C
Cai Yudong 已提交
581
    ASSERT_TRUE(config.ResetDefaultConfig().ok());
S
starlord 已提交
582
}